﻿#pragma once

using namespace System;
using namespace System::Threading;

namespace $RootNamespace$
{

	public ref class $MultiThreadedSingleton$ sealed
	{
	private:

		$MultiThreadedSingleton$();
		static $MultiThreadedSingleton$^ Init()
		{
			return gcnew $MultiThreadedSingleton$();
		};

		static initonly Lazy<$MultiThreadedSingleton$^> ^_instance = gcnew Lazy<$MultiThreadedSingleton$^>(
			gcnew System::Func<$MultiThreadedSingleton$^>(&$MultiThreadedSingleton$::Init), LazyThreadSafetyMode::PublicationOnly);


public:
	void Operation();
		static property $MultiThreadedSingleton$ ^Instance
		{
			$MultiThreadedSingleton$ ^get()
			{
				return _instance->Value;
			};
		}

		static void Test();

	};

}

